package jmine.tec.report.cell;

import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;

/**
 * Interface DataCell. Um DataCell deve carregar o valor de uma célula e deve prover métodos para acessar este valor. Esta interface será
 * utilizado por DataRow's.
 * 
 * @author julien
 */
public interface DataCell extends Comparable<DataCell> {

    /**
     * Retorna o valor desta célula como Double. Se isto não dizer sentido ou não for possível deve devolver NaN (Not a Number)
     * 
     * @return Double
     */
    Double toDouble();

    /**
     * Retorna o valor desta célula como um Date. Se isto não fizer sentido ou não for possível deve devolver null
     * 
     * @return Date ou null
     */
    Date toDate();

    /**
     * Retorna o valor desta célula como um String.
     * 
     * @return String O valor da célula
     */
    String toString();

    /**
     * Retorna o valor desta célula como um String. As implementações devem usar o Format adequado para formatar o valor que carregam.
     * 
     * @param dateFormat DateFormat Formato para Date
     * @param doubleFormat NumberFormat Formato para Double
     * @param currencyFormat NumberFormat Formato para Double que representa Currency
     * @return String O valor formatado
     */
    String toString(DateFormat dateFormat, NumberFormat doubleFormat, NumberFormat currencyFormat);

}
